package com.xunyin.modules.mtgoods.service;


import com.xunyin.modules.mtgoods.domain.MtGoods;
import com.xunyin.modules.mtgoods.service.dto.GoodsDto;
import com.xunyin.modules.mtgoodssku.domain.MtGoodsSku;
import com.xunyin.modules.mtgoodsspec.domain.MtGoodsSpec;
import com.xunyin.modules.mtgoodsspec.service.dto.GoodsSpecValueDto;
import com.xunyin.pagination.PaginationRequest;
import com.xunyin.pagination.PaginationResponse;

import java.lang.reflect.InvocationTargetException;
import java.util.List;


/**
 * 商品业务接口
 * Copyright (C) 2022-2023
 * All rights reserved, Designed By www.tonetn.com
 * 注意：
 * 本软件为讯音云商开发研制，未经购买不得使用
 * 购买后可获得全部源代码（禁止转卖、分享、上传到码云、github等开源平台）
 * 一经发现盗用、分享等行为，将追究法律责任，后果自负
 */
public interface GoodsService {

    /**
     * 分页查询商品列表
     *
     * @param paginationRequest
     * @return
     */
    PaginationResponse<GoodsDto> queryGoodsListByPagination(PaginationRequest paginationRequest) ;

    /**
     * 保存商品
     *
     * @param reqDto
     */
    MtGoods saveGoods(MtGoods reqDto) ;

    /**
     * 根据ID获取商品信息
     *
     * @param  id 商品ID
     */
    MtGoods queryGoodsById(Integer id) ;

    /**
     * 根据编码获取商品信息
     *
     * @param goodsNo
     */
    MtGoods queryGoodsByGoodsNo(String goodsNo);

    /**
     * 根据条码获取sku信息
     *
     * @param skuNo skuNo
     * */
    MtGoodsSku getSkuInfoBySkuNo(String skuNo) ;

    /**
     * 根据ID获取商品详情
     *
     * @param id
     */
    GoodsDto getGoodsDetail(Integer id, boolean getDeleteSpec) throws InvocationTargetException, IllegalAccessException;

    /**
     * 根据ID删除
     *
     * @param  id       ID
     * @param  operator 操作人
     */
    void deleteGoods(Integer id, String operator);

    /**
     * 获取店铺的商品列表
     * @param storeId
     * @param keyword
     * @return
     * */
    List<MtGoods> getStoreGoodsList(Integer storeId, String keyword) ;

    /**
     * 根据skuId获取规格列表
     * */
    List<GoodsSpecValueDto> getSpecListBySkuId(Integer skuId) ;

    /**
     * 获取规格详情
     * */
    MtGoodsSpec getSpecDetail(Integer specId);

    /**
     * 更新已售数量
     * */
    Boolean updateInitSale(Integer goodsId);
}
